/**
 * @file mechanoid.h
 * @author trevrasher
 * @brief 
 * @version 0.1
 * @date 2024-05-7
 * 
 * @copyright Copyright (c) 2024
 * 
 */

#ifndef MECHANOID_H
#define MECHANOID_H

#include "log.h"
#include "datapanel.h"

#include <QObject>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsRectItem>
#include <QGraphicsPathItem>
#include <QEvent>
#include <QMap>
#include <QSet>
#include <QString>

/**
 * @brief Структура описывает форму, размер и цвет одной фигуры
 * 
 */
struct SeriesSettings {
    int shape; ///< Тип формы 
    int size ; ///< Размер фигуры
    QColor color; ///< Цвет
};

/**
 * @brief Класс mechanoid
 * 
 * Класс mechanoid представляет собой виджет с использованием QGraphView.
 * 
 * Он предоставляет возможности для добавления точек,
 * управления их отображением, изменения цветов и форм фигур... может еще чего придумаю xD.
 */
class mechanoid : public QGraphicsView
{
    Q_OBJECT

    QGraphicsScene* _scene; ///< Сцена

    QMap<QString, QGraphicsItem*> _points; ///< Точки
    QMap<QString, SeriesSettings> _points_settings; ///< Настройки отображения точек
    QMap<QString, QGraphicsTextItem*> _points_labels; ///< Идентификаторы точек 
    QSet<QString> _valid_points_names; ///< Список разрешенных имен для отображения

public:
    mechanoid(QWidget* parent = nullptr);

    QGraphicsItem* intToShape(int shapeType, int size, QColor color, qreal x, qreal y);
    void handleInitialization(int width, int height);

    void handleAddPoint(const QString& point_name, float x, float y);
    void handleAddSettings(const QString& point_name, int shapeType, int size, int colorCode);
    void handleSetPointSize(const QString& point_name, int size);
    void handleRemovePoint(const QString& point_name);

    void handleEnableLabelView(const QString& point_name);
    void handleDisableLabelView(const QString& point_name);

private:
    QColor intToColor(int colorCode);
};

#endif // MECHANOID_H
